name: Update Swagger UI
on:
  schedule:
    - cron:  '0 10 * * *'
  workflow_dispatch:

jobs:
  updateSwagger:
    runs-on: ubuntu-latest
    steps:
      - name: Checkout
        uses: actions/checkout@v4
      - name: Set up Python 3.13
        uses: actions/setup-python@v5
        with:
          python-version: "3.13"
          cache: 'pip'
      - name: Install requirements
        run: |
          pip install -r requirements.txt
      - name: Generate openapi.json
        env:
          GH_TOKEN: ${{ github.token }}
        run: |
          gh repo clone xtekky/gpt4free
          cd gpt4free
          python -m etc.tool.openapi
          mv openapi.json ../
          cd ..
          rm -rf gpt4free
      - name: Get Latest Swagger UI Release
        id: swagger-ui
        run: |
          release_tag=$(curl -sL https://api.github.com/repos/swagger-api/swagger-ui/releases/latest | jq -r ".tag_name")
          echo "release_tag=$release_tag" >> $GITHUB_OUTPUT
          current_tag=$(<swagger-ui.version)
          echo "current_tag=$current_tag" >> $GITHUB_OUTPUT
      - name: Update Swagger UI
        if: steps.swagger-ui.outputs.current_tag != steps.swagger-ui.outputs.release_tag
        env:
          RELEASE_TAG: ${{ steps.swagger-ui.outputs.release_tag }}
          SWAGGER_YAML: "openapi.json"
        run: |
          # Delete the dist directory and index.html
          rm -fr dist index.html
          # Download the release
          curl -sL -o $RELEASE_TAG https://api.github.com/repos/swagger-api/swagger-ui/tarball/$RELEASE_TAG
          # Extract the dist directory
          tar -xzf $RELEASE_TAG --strip-components=1 $(tar -tzf $RELEASE_TAG | head -1 | cut -f1 -d"/")/dist
          rm $RELEASE_TAG
          # Move index.html to the root
          mv dist/index.html .
          mv openapi.json dist/
          # Fix references in dist/swagger-initializer and index.html
          sed -i "s|https://petstore.swagger.io/v2/swagger.json|$SWAGGER_YAML|g" dist/swagger-initializer.js
          sed -i "s|href=\"./|href=\"dist/|g" index.html
          sed -i "s|src=\"./|src=\"dist/|g" index.html
          sed -i "s|href=\"index|href=\"dist/index|g" index.html
          # Update current release
          echo ${{ steps.swagger-ui.outputs.release_tag }} > swagger-ui.version
      - name: Create Pull Request
        uses: peter-evans/create-pull-request@v7
        with:
          token: ${{ github.token }}
          commit-message: Update swagger-ui to ${{ steps.swagger-ui.outputs.release_tag }}
          title: Update SwaggerUI to ${{ steps.swagger-ui.outputs.release_tag }}
          body: |
            Updates [swagger-ui][1] to ${{ steps.swagger-ui.outputs.release_tag }}

            Auto-generated by [create-pull-request][2]

            [1]: https://github.com/swagger-api/swagger-ui
            [2]: https://github.com/peter-evans/create-pull-request
          labels: dependencies, automated pr
          branch: swagger-ui-updates
